From 6f8162a2e187812ef2ebb5d5a2972b777a9e113e Mon Sep 17 00:00:00 2001 From: Tristan Van Berkom Date: Tue, 26 Mar 2013 19:13:12 +0900 Subject: [PATCH] GtkFontChooserDialog: Define children with a GtkBuilder template --- gtk/Makefile.am | 1 + gtk/gtk.gresource.xml | 1 + gtk/gtkfontchooserdialog.c | 66 ++++++++++--------------------- gtk/gtkfontchooserdialog.ui | 78 +++++++++++++++++++++++++++++++++++++ gtk/tests/templates.c | 11 ++++++ 5 files changed, 112 insertions(+), 45 deletions(-) create mode 100644 gtk/gtkfontchooserdialog.ui diff --git a/gtk/Makefile.am b/gtk/Makefile.am index 7e5b0d2264..426c4d78af 100644 --- a/gtk/Makefile.am +++ b/gtk/Makefile.am @@ -1104,6 +1104,7 @@ COMPOSITE_TEMPLATES = \ gtkdialog.ui \ gtkfilechooserdefault.ui \ gtkfilechooserdialog.ui \ + gtkfontchooserdialog.ui \ gtkfontchooserwidget.ui \ gtkinfobar.ui \ gtklockbutton.ui \ diff --git a/gtk/gtk.gresource.xml b/gtk/gtk.gresource.xml index 9ca8d7a819..43f0af03be 100644 --- a/gtk/gtk.gresource.xml +++ b/gtk/gtk.gresource.xml @@ -19,6 +19,7 @@ gtkdialog.ui gtkfilechooserdefault.ui gtkfilechooserdialog.ui + gtkfontchooserdialog.ui gtkfontchooserwidget.ui gtkinfobar.ui gtklockbutton.ui diff --git a/gtk/gtkfontchooserdialog.c b/gtk/gtkfontchooserdialog.c index 67244407c4..d1209ded9f 100644 --- a/gtk/gtkfontchooserdialog.c +++ b/gtk/gtkfontchooserdialog.c @@ -109,81 +109,57 @@ gtk_font_chooser_dialog_get_property (GObject *object, } } +static void +font_activated_cb (GtkFontChooser *fontchooser, + const gchar *fontname, + gpointer user_data) +{ + GtkDialog *dialog = user_data; + + gtk_dialog_response (dialog, GTK_RESPONSE_OK); +} + static void gtk_font_chooser_dialog_class_init (GtkFontChooserDialogClass *klass) { GObjectClass *gobject_class = G_OBJECT_CLASS (klass); + GtkWidgetClass *widget_class = GTK_WIDGET_CLASS (klass); gobject_class->get_property = gtk_font_chooser_dialog_get_property; gobject_class->set_property = gtk_font_chooser_dialog_set_property; _gtk_font_chooser_install_properties (gobject_class); - g_type_class_add_private (klass, sizeof (GtkFontChooserDialogPrivate)); -} + /* Bind class to template + */ + gtk_widget_class_set_template_from_resource (widget_class, + "/org/gtk/libgtk/gtkfontchooserdialog.ui"); -static void -font_activated_cb (GtkFontChooser *fontchooser, - const gchar *fontname, - gpointer user_data) -{ - GtkDialog *dialog = user_data; + gtk_widget_class_bind_child (widget_class, GtkFontChooserDialogPrivate, fontchooser); + gtk_widget_class_bind_child (widget_class, GtkFontChooserDialogPrivate, select_button); + gtk_widget_class_bind_child (widget_class, GtkFontChooserDialogPrivate, cancel_button); + gtk_widget_class_bind_callback (widget_class, font_activated_cb); - gtk_dialog_response (dialog, GTK_RESPONSE_OK); + g_type_class_add_private (klass, sizeof (GtkFontChooserDialogPrivate)); } static void gtk_font_chooser_dialog_init (GtkFontChooserDialog *fontchooserdiag) { GtkFontChooserDialogPrivate *priv; - GtkDialog *dialog = GTK_DIALOG (fontchooserdiag); - GtkWidget *action_area, *content_area; fontchooserdiag->priv = G_TYPE_INSTANCE_GET_PRIVATE (fontchooserdiag, GTK_TYPE_FONT_CHOOSER_DIALOG, GtkFontChooserDialogPrivate); priv = fontchooserdiag->priv; - content_area = gtk_dialog_get_content_area (dialog); - action_area = gtk_dialog_get_action_area (dialog); - - gtk_container_set_border_width (GTK_CONTAINER (dialog), 5); - gtk_box_set_spacing (GTK_BOX (content_area), 2); /* 2 * 5 + 2 = 12 */ - gtk_container_set_border_width (GTK_CONTAINER (action_area), 5); - gtk_box_set_spacing (GTK_BOX (action_area), 6); - - gtk_widget_push_composite_child (); - - gtk_window_set_resizable (GTK_WINDOW (fontchooserdiag), TRUE); - - /* Create the content area */ - priv->fontchooser = gtk_font_chooser_widget_new (); - gtk_container_set_border_width (GTK_CONTAINER (priv->fontchooser), 5); - gtk_widget_show (priv->fontchooser); - gtk_box_pack_start (GTK_BOX (content_area), - priv->fontchooser, TRUE, TRUE, 0); - - g_signal_connect (priv->fontchooser, "font-activated", - G_CALLBACK (font_activated_cb), dialog); - - /* Create the action area */ - priv->cancel_button = gtk_dialog_add_button (dialog, - GTK_STOCK_CANCEL, - GTK_RESPONSE_CANCEL); - priv->select_button = gtk_dialog_add_button (dialog, - _("_Select"), - GTK_RESPONSE_OK); - gtk_widget_grab_default (priv->select_button); + gtk_widget_init_template (GTK_WIDGET (fontchooserdiag)); gtk_dialog_set_alternative_button_order (GTK_DIALOG (fontchooserdiag), GTK_RESPONSE_OK, GTK_RESPONSE_CANCEL, -1); - gtk_window_set_title (GTK_WINDOW (fontchooserdiag), _("Font Selection")); - - gtk_widget_pop_composite_child (); - _gtk_font_chooser_set_delegate (GTK_FONT_CHOOSER (fontchooserdiag), GTK_FONT_CHOOSER (priv->fontchooser)); } diff --git a/gtk/gtkfontchooserdialog.ui b/gtk/gtkfontchooserdialog.ui new file mode 100644 index 0000000000..8878052948 --- /dev/null +++ b/gtk/gtkfontchooserdialog.ui @@ -0,0 +1,78 @@ + + + + + diff --git a/gtk/tests/templates.c b/gtk/tests/templates.c index 6c61bdacc2..cdbaa2ec44 100644 --- a/gtk/tests/templates.c +++ b/gtk/tests/templates.c @@ -234,6 +234,16 @@ test_font_chooser_widget_basic (void) gtk_widget_destroy (widget); } +static void +test_font_chooser_dialog_basic (void) +{ + GtkWidget *widget; + + widget = gtk_font_chooser_dialog_new ("Choose a font !", NULL); + g_assert (GTK_IS_FONT_CHOOSER_DIALOG (widget)); + gtk_widget_destroy (widget); +} + int main (int argc, char **argv) { @@ -261,6 +271,7 @@ main (int argc, char **argv) g_test_add_func ("/Template/GtkFileChooserWidget/Basic", test_file_chooser_widget_basic); g_test_add_func ("/Template/GtkFileChooserDialog/Basic", test_file_chooser_dialog_basic); g_test_add_func ("/Template/GtkFontChooserWidget/Basic", test_font_chooser_widget_basic); + g_test_add_func ("/Template/GtkFontChooserDialog/Basic", test_font_chooser_dialog_basic); return g_test_run(); } -- 2.30.2